## Copyright (c) 2015, Júlio Hoffimann Mendes <juliohm@stanford.edu>
##
## Permission to use, copy, modify, and/or distribute this software for any
## purpose with or without fee is hereby granted, provided that the above
## copyright notice and this permission notice appear in all copies.
##
## THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
## WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
## MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
## ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
## ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
## OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

datadir = joinpath(dirname(@__FILE__),"data")
datafiles = filter(s -> ismatch(r".*\.dat", s), readdir(datadir))

database = Dict()
for fname in datafiles
  push!(database, fname[1:end-4] => joinpath(datadir, fname))
end

identifiers = sort(collect(keys(database)))

function available()
  for identifier in identifiers
    println(identifier)
  end
end

function training_image(identifier::AbstractString)
  @assert identifier ∈ identifiers "training image not available"

  datafile = database[identifier]

  f = open(datafile)
  kind, nx, ny, nz = split(strip(readline(f)))
  nx = parse(Int, nx)
  ny = parse(Int, ny)
  nz = parse(Int, nz)
  data = readdlm(f)
  close(f)

  reshape(data, nx, ny, nz)
end
